精  
【开坑慢慢填】通用MF引擎基础教程及参考 《第2册》
id: 3151865415 | 楼主:dodoufatch | 返回首页
id: 53377535740
1L | 作者:dodoufatch | 发布于 2014-07-08 09:52

这是第一册 tieba.baidu.com/p/2851456572
第一册目录:
第一章 认识MMF,掌握MMF (此章为基础操作性以及属性操作性内容)
1- 打开mfa 2-认识界面 3-物品 4-插入物品、移动物品、复制物品、克隆物品、删除物品、编辑物品 5-锁定物品 6- Frame的概念 7-物品大小与判定区域 8-焦点 9-编辑物品大小 10-物品种类(type) 11-组(Group) 12-设定初始变量值 13-更改初始属性值 14-状态(Animation) 15-制作关卡
第二章 关卡后台事件入门
1-event的认识以及EVENT的基本结构 2-坐标与像素 3-冲突判定 4-初始化执行型代码 5-初始化执行型代码制作实例 6- 时间间隔与计时器(Timer) 7- 音乐与频道(Sample and Channel) 8-控制播放代码初步接触 9-帧(Frame)代码 10- position的比较
本册目录暂时还没定下来。。。



id: 53377653500
2L | 作者:dodoufatch | 发布于 2014-07-08 09:54

第三章 逻辑条件与Value的直接运用
1- OR 与 Negate
OR的语法如下:
条件一
OR
条件二
Action 1
.......
例如:
我生了男孩
OR
我生了女孩
我喝酒
那么执行结果是只要我生了一个孩子,那么我就喝酒。
OR可以避免重复繁杂的动作。
例如:
Mario is overlapping Luigi
SC: Next Frame
Mario is overlapping Koopa
SC:Next Frame
那么可以缩减为
Mario is overlapping Luigi
OR
Mario is overlapping Koppa
SC:Next Frame
图3-1 OR语句的示范
我们在第二个事件上右键,选择OR operator(filtered )选项来插入OR,然后放中间。
本来默认是两个条件必须全部实现才能开始动作,现在只要实现1个即可。
OR也可以放多个事件之间,甚至可以放多个。大家可以自己摸索一下。
Negate的语法为:
Negate 条件
ACTION 1
.........
Negate,顾名思义是“否定”。
一个条件如果加上了NEGATE,那么作用效果则相反。
例如:
Negate 我没节操
我心里默念“上帝”
那么,执行结果是,我心里无时无刻默念着“上帝”
NEGATE语句中,如果条件没成立则执行动作,如果成立则停止执行。
红色的条件(一触即发并非延时性的条件)是无法NEGATE的,例如Collision between不能negate,只能转换为overlapping。
nagate只需在一个条件上右键选Negate即可。
图3-2 NEGATE的标志是一个叉叉
(另外Always的negate是Never)



id: 53377701855
3L | 作者:dodoufatch | 发布于 2014-07-08 09:56

2- VisibiLity
该英文单词的原意为“可见”
VISIBILITY的条件语法为:
Is 物体 Visible?(invisible?)
动作
那么,当一个物体visible(可见)(或者invisible不可见)时,条件执行。
(invisible不等于semi为0)
一般地,visibitily可以通过属性菜单来控制初始visibility(visible at start)或者通过动作来控制。
属性菜单中,单击一个物体,可以设置初始是否可见。
一般地,事件动作物体都不可见(如各种触发点等等)
除了初始之外,还可以中途设置。
语法为:
条件1
.......
条件N
Object: make invisible (或者make reppear其实就是visible了)
图3-3 visibility的条件与动作语句的例子
在添加中,我们右键选项里看见了visibility就可以添加了。
此外在动作语句中还可以添加Flash Object(闪动物体,例如KOPPA受伤时的闪),set ink effect设置特效,set semi-transperency(设置可见度,0-128之间)等等。这些都在visibility选项中(注意是事件部分不是条件部分)
semi和effect在属性栏中可以初始设置。单击一个物体,左侧属性栏中慢慢找,能找到effect与semi。
图3-4 semi与effect



id: 53377742920
4L | 作者:dodoufatch | 发布于 2014-07-08 09:57

6- Test Value
在F2中,最主要的VALUE为Global Value(全局变量)和Alterable Value(物体内置可变变量)。
关于VALUE的基本介绍可以看X7的教程或者我的第一册有一点点介绍
图3-7 第一册中关于VALUE的一丁点儿介绍
在语句中,如果要直接套用value,则语法为
Global Value ..(如果重命名了则直接用改名字)
Alterable Value ... (“物体”) (注意引号不能省)
例如:
Always
Set Global Value A to Global Value A
Set Global Value B to Alterable Value A("Active 1")
TEST VALUE用于条件中。
创建一个条件,选择(图3-8),右键选择Compareto Global Value
(下图为图3-9)
出现如图3-9的界面。
(马里奥大小 为已命名的Global Value A。关于初始命名请参见第一册的第一章的第12节)
这个界面和TEST POSITION中的那个界面很像
我们在下面输入任意一个值,就可以进行判定了。
例如判定当Global Value Z=12时关闭游戏,则
如下:

(图3-10)
Alterable Value 的判定方法则大同小异。
插入新条件,在界面中选择一个物体,右键,选alterable中的第一个
出现大同小异的界面。
alterable value的实质是这个物体的各种数据以及属性。
图3-11
另外还可以大于小于不等于等等。
后面的值也可以直接引用position、另一个value等等。



id: 53377770125
5L | 作者:dodoufatch | 发布于 2014-07-08 09:57

7- Changing values
更改globalvalue
更改value的值在动作块进行。首先新建动作,找到如图3-8的东西,选择change a global value,然后有3个选择:set add subtract
set则是重新设置。
add和subtract是加和减。
例如add 3 to Global Value A
相当于set Global Value A to Global Value A +3
subtract则相当于add这个表达式的值的相反数。
subtract 3 from GVA 相当于 set GVA to GVA -3
图3-12 也可以set一个表达式
alterable value的设置方式大同小异。这里不再过多阐述。
(关于spread value现在可以不去管它,后面会说到)



id: 53377792793
6L | 作者:dodoufatch | 发布于 2014-07-08 09:58

8- Player Control与Keyboard --键盘控制
-合作学习-
在马里奥运动的代码块中,你认为什么是必不可少的?
仔细研究一些引擎关于动作的代码块,他们的条件中都有什么?
Player1的Score和什么相关联?
Player还有什么功能?
-课前引入
大家都知道,马里奥是通过键盘来控制的。F2中关于键盘控制的一共有2种类——PlayerControls和KeyboardControls。前者是内置的,后者是要装入一个ctrlx.mfx(貌似是这个吧反正是一个MFX具体不清楚了)才能用,也就是拓展包。拓展包非常好用。(有关拓展包的使用这里不做介绍,详见8月推出的《MF制作常用拓展控件宝典 第一卷》)(今天除外)
这里我们明天再介绍PlayerControl(也就是那个Player1 Player2之类的。RE中一共3个,W10E中则4个,各有各的功能) 今天我在外面的电脑上没F2
一般地,W10E的Player2的score是控制金币的。。
PlayerControl最主要的2个功能:1 显示Score(包括Lives) 2 进行输入控制(俗称按键控制)
-课内详解
KEYBOARD,就是创建新条件(注意是条件!CONDITION)时界面中一个类似键盘的东西。KEYBOARD只运用于条件。有2个主要功能:1. 按下键时执行一次下列动作。 2.只要一直按着一直执行。
-例题-
【例1】 按下键K后,关闭游戏
【讲解】
我们创建一个KEYBOARD条件,选择“Upon Pressing a Key”,然后按一下键盘上的“K”,那么条件就完成了。
条件应该为 Upon Pressing a Key "K"
然后下面就直接用STORYBOARD CONTROL中的end the application即可。
【答案】
Upon pressing "K"
storyboardControl: End the application

【例2】重新制作一个新的MFA,里面有一个小球。键盘按下→时小球会向右运动。
【讲解】
这句话的意思其实是“当键盘按住→时小球就要一直向右运动”。因此用Repeat while pressing a key。
向右运动则可以通过递加X坐标来实现。
【答案】
创建一个Active。命名为BALL,并画成球形
Repeat While Pressing "Right Arrow" (编者注:上下左右键输进去后在代码中显示是Left/Right/Up/Down Arrow,空格是Space。所以只需按一下→即可)
BALL: Set X Position to X("BALL")+1 (编者注:可以是2、3、4、5、6,只不过速度不一样)
完成了!



id: 53377814874
7L | 作者:dodoufatch | 发布于 2014-07-08 09:58

9- 将组(Group)应用到条件中
之前我们在第一册的第一章第11节学过Group的概念(忘记了可以去温习一下)。创建Group当然是为了应用到代码中。今天我们通过几个例子来介绍GROUP应用的方便性和必要性。
【课前思考】
现在有100种金币,如果马里奥吃到了任意一种金币都直接跳入下一个Frame,那么有必要输入100个Events吗?
有没有更便捷的方法?
【例1】解决【课前思考】中的问题
【分析】如果这100个金币都能放入一个Group那会很轻松。
为了方便,我们在对一个金币克隆前,提前将他加入一个Group(例如Group.13)里。(加入GROUP的方法请参考第一册第一章第11节)然后再克隆100份,进行编辑。
【答案】
Collision between 马里奥 and Group.13 (在界面里能看到一个东西名为Group.13)
STORYBOARDCONTROL: Next Frame
【应用】
马里奥被怪物碰到时,都会变小(或死亡)。因为大多数引擎将怪物放入了一个Group,只要马里奥碰到这个Group的任何一个成员的实例,那么都会执行动作。
【课后思考题】
实现 当马里奥碰到金砖时,视为马里奥碰到怪物。



id: 53377837465
8L | 作者:dodoufatch | 发布于 2014-07-08 09:59

10- Animation(状态)作条件的初步应用
【课前挑战】 制作一个警告文字牌,里面会先后出现3段话,当3段话均展示完毕时,该牌子消失
【课内要点】
Animation如果忘记了回到第一册第一章温习一下,
今天我们主要将“Has an animation finished?”来做条件
格式如下:
物体:Animation ...... is over(通过“Has an animation finished?”选项得出)
动作
【例1】解决【课前挑战】
【分析】
首先,创建一个Active,调到宽200,长200,并且删去那个菱形,画一个长方形,并填充黄色。
首先写上第一段话。
然后在下面将这个Animation下面的FRAME1复制粘贴5份,并转入DirectObject界面,将Speed调到10,然后返回Frames界面。在Frame5写第二段话,复制到Frame9,同理一直到Frame13完成。
然后将该东西放到关卡中。
【答案1】
警告牌:Animation Stopped is over
警告牌:Destroy
【答案2】
警告牌: Animation Stopped is over
警告牌:set semi-transparency to 128

【例2】 制作一个小球静止不动,当他碰到Mario的时候放变大动画,然后小球消失,板栗仔出现。
(制作小球都会吧)
【分析】我们要在小球的Appearing这个Animation中制作一下变大动画,最后别忘了调速度,变的不要太快
【答案】
Collision between 小球 and Mario
Alterable Value A of 小球 <>0
小球:change animation to Appearing
小球:set alterable value A to 1
小球:Animation Appearing is over
CreateObject:Create 板栗 at (0,0) from 小球
小球:Destroy



id: 53377887584
9L | 作者:dodoufatch | 发布于 2014-07-08 10:00

由于本人水平有限,有些地方不是非常准确,敬请各位吧友指正


id: 53382174647
10L | 作者:RAFFICA | 发布于 2014-07-08 11:30

沙发?
变量就是这么创建的啊!



id: 53516726245
11L | 作者:dodoufatch | 发布于 2014-07-10 18:53

11- Flag(旗帜、标志,俗称开关)与Flag判定
Internal Flag(内部标志)为一种特殊的alterable value。他类似于Flash语言中的Boolean类,只有真假两个量。F2中的INTERNAL FLAG着附与物体上,并且只有on和off两种值,可以视作只有1和0的Alterable Value。
Flag的运用很广泛。比如当一些判定条件比较复杂,且有一组动作有时执行有时不执行时,就可以用Flag来控制是否执行。Flag的编号为从0开始的正整数。每个物体都有自己特有的FLAG,FLAG初始值为off。初始值也可以在Start of Frame中进行初始化设定。
下面是Flag语句:
(条件) 物体:is internal flag 旗帜编码 on?(或者off?)
执行动作
(动作)判定条件
物体:set internal flag 编码 on(或者off)(或者Toggle internal flag 编码)
TOGGLE FLAG是反转旗帜。一开始如果是on则off,off则on。(条件中没有Toggle语句)
我们通过一个例子来体会flag
【例1】在新的MFA里让小球做四边形轨迹的运动。必须用到flag
【分析】我们首先画一个四边形的BACKDROP(背景),然后插入四个active,设置为初始不可见,并将形状画为矩形。将四个矩形分别如下图放置法:


图3-13 红色为Active,蓝色为小球运动轨迹。此例为逆时针。
然后删去那个背景长方形,只剩4个ACTIVE以及一个小球。
通过控制四段代码的flag开关来执行代码。
(另外:flag的条件创建方法——点击物品——右键——Alterable Value选项——里面有个flag选项)
【答案】
1(条件)·小球:internal flag 1 is on
(动作)小球:set X position to X("BALL")+3
2(条件)小球:internal flag 2 is on
(动作)小球:set Y position to Y("BALL")+3
3(条件)·小球:internal flag 3 is on
(动作)小球:set X position to X("BALL")-3
4(条件)小球:internal flag 4 is on
(动作)小球:set Y position to Y("BALL")-3
5(条件)Collision between BALL and Active 1
(动作)小球:set internal flag 1 on
小球:set internal flag 2 off
小球:set internal flag 3 off
小球:set internal flag 4 off
6(条件)Collision between BALL and Active 2
(动作)小球:set internal flag 2 on
小球:set internal flag 1 off
小球:set internal flag 3 off
小球:set internal flag 4 off
后面的以此类推,将FLAG3和FLAG4控制好。
【后话】 其实,本题可以直接通过运动状态的改变、运动方向的改变来实现。那样会更加简洁!下一节我们就来研究这种方法。(晚上再发)



id: 53516740033
12L | 作者:dodoufatch | 发布于 2014-07-10 18:54

12- Activate 与Deactivate
【事件组的概念】
事件组是保存一组事件的,相当于文件夹。
如图3-14就是
我们打开事件组,发现里面有一些事件
如图3-15就是一个事件组打开后的样子。
我们可以先在空地右键——insert——A Group of event,就可以创建事件组。
打开事件组的属性,发现如下界面
图3-16
第一个为事件组名称,第二个为是否密码保护。第三个勾勾选项默认是选的,表示是否开始就执行。如果没打就是一开始不执行,事件组的标题显示为灰色。这种事件组是可以调用Activate与Deactivate的
【讲解】
Activate与DEACTIVATE的实质是INTRENAL FLAG的变形。也就是说,灰色标题的事件组在“internal flag”开的情况下才执行,否则不执行。而这两个动作则相当于将internalflag进行了开关。
Activate一个事件组表示启用该事件组。DEACTIVE则表示禁用。在禁用期间该事件组相当于不存在。
我们打开条件面板,点击第一个类似电脑的东西,右键选择Group of event里面的第一个,既可以创建一个条件。当一个被指定的事件组状态为启用中时,则条件成立,执行下面的动作。如果想要判定是否为禁用中,则只需NEGATE。
打开动作面板,在同样的地方能找到set activate与set deactivate。他们分别能把一个指定的事件组启用与禁用。
效果图如图3-17(图3-17)
【应用】
在一些引擎中,关于怪物的事件组通常在Start of Frame中被激活,而当马里奥死去时,则禁用这些事件组,防止一些BUG的发生 。
而这种启用禁用事件组由于使用起来方便,因此应用广泛。(关于滚屏的设定大家可以自己去研究一下哦!看看怎样应用这些代码的)



id: 53516755030
13L | 作者:dodoufatch | 发布于 2014-07-10 18:54

13- PlayerControl(操作控制)(1)
上次由于那个原因,这个没发。这次直接进入正题。
PLAYERCONTROL的效果应用与KEYBOARDCONTROL大同小异,只不过按键可以随着玩家设定而改变,并不是固定的。
图3-18
在图3-18黑圈的位置可以设定按键。
其中BUTTON1BUTTON2等等的为PLAYERCONTROL效果中的fire 1 fire 2等等
打开条件面板,右键player1,选择Joysticks中的read joystick state
后面出现界面如图3-19
图3-19
我们发现这里有8个方向,实质键盘只有4个方向。当我们按下键盘上的对应的上下左右(这些上下左右键都可以设定,这里的上下左右指3-18中设定的上下左右)时,条件就会执行一次,然后等待下一次实现。而那个REPEAT WHILE....选项则是一旦实现则一直执行。这两者的区别,相信在KEYBOARD那一课中已经知道了吧。
Fire button 1、2、3、4分别为3-18中设定的4个特殊键。一般引擎中FIRE 1 为跳跃, FIRE 2 为加速。



id: 53909991160
14L | 作者:俺滴娘7 | 发布于 2014-07-17 18:49

dod有没有必要说一下event书写顺序的问题,即达到同一条件看似同时执行的多条事件实际上也是有先后顺序的,这个顺序开发者没有明确强调,但在一些细节上却体现了出来:例w10e里的踩红/蓝/金乌龟的代码,这里就要明确event的顺序,创建/射击 尸体--设置可变值C

回复
dodoufatch 于 2014-07-17 21:37:18 id: 53919119352
这个问题我在之后的基本操作栏目里尽量提一下吧,谢谢建议
俺滴娘7 于 2014-07-17 22:28:59 id: 53922331438
回复 dodoufatch :这个确实可以造成影响,另一例w10e里的马里奥着地


id: 53965333273
15L | 作者:dodoufatch | 发布于 2014-07-18 18:04

好久没发了,抱歉啊!
今天暂时把一些新人期待已久的代码运用篇发一下。第15节开始继续将代码。
14 - 如何利用代码来做一个更好的关卡——综合运用篇

---------14A- 利用代码做新的道具(一) 之 替换法
我们先从一个实例入入手吧!
【实例1】制作“进水管开关”
前景--制作一个进水管开关。该开关为开时,所有蓝色水管不可进入,被封死了。关的时候则可以进入,封水管的两个砖块变为透明,且没有实心。
【准备】:(以下物体均为Active类的)一 两个开关,分别(注意是分别!)一个上面写有ON,一个写有OFF。
一个由两个砖块图案组成的ACTIVE。(即把砖块的图案复制两份放到这个ACTIVE里,这个ACTIVE一般是宽64高32)然后把这个ACTIVE克隆一份,另一份透明度弄到100左右。(在属性栏中INK EFFECT中更改SEMI的初始值,或者在EVENT中更改)
注意把两个实心的不可见物体(W10E中有内置的加固体)放到水管上。位置与那个双砖块图案重叠。
另外,开关ON和开关OFF最好加实心,如果能做出金币转的效果就更好。但是相对于初学者来说,这些不要求掌握,可以自己去慢慢探索哟!
【代码】
1. (条件)Collision between 马里奥 and 开关ON
(动作)Create Object:create 开关OFF at (0,0) from 开关ON
(动作)Music:Play Sample “金币音乐”
(动作)开关ON:destroy
(动作)Create Object:Create 透明砖块 at (0,0) from 封水管砖块
(动作)透明砖块:destroy
(动作)实心块:destroy
(动作)实心块:destroy {编者注:这个动作注意要重复两遍}
2. (条件) Collision between 马里奥 and 开关OFF
(动作)Create Object:create 实心块 at (0,0) from 透明砖
(动作)Create Object:create 实心块 at (0,32) from 透明砖
(动作)Create Obejct:create 封水管砖块 at (0,0) from 透明砖
(动作)透明砖块:destroy
(动作)Create Object:Create 开关ON at (0,0) from 开关OF
(动作)开关OFF:destroy
(动作)Music: Play Sample“金币音乐”
【讲解】道具,必定是要能达到某种效果(例如解封,能创建新物体,改变状态等等)。这就少不了Internal flag、create object等代码的运用了。熟练掌握这些代码,才能更好的进行综合运用。通过上面的实例,相信大家已经摸索出了一种最基本的方法,即替换。
替换的基本原理是在原物体上create新物体,然后Destroy原物体,以达到替换的效果。如一种道具要达到2种状态(如实例1中的开关),那么需要将这个道具各个状态单独制作成一个Active,并单独进行事件处理。
替换的应用非常广泛,他能弥补一个Active的内部动画Frame无法被代码控制的缺陷。这也就是我们看到的大多数多个状态的物体状态间的切换以及更替的幕后操控者。
我们再来看一个实例吧!
【实例2】铁链道具
(P.S. 该实例是我在NEW WORLD中运用的一个实例。现在我原封不动地搬出来分享一下原理)
【效果】屏幕正上方有一个铁链标志,不透明时表示铁链可用,透明时反之。吃一个铁链金币只可以创建一个铁链。
【准备】铁链道具图案ACTIVE,事先在Event的相应事件组中为铁链加固,两个铁链标志(分别为透明与不透明),一个由特大号的金币里面有一个小小的铁链图案组成的active。
铁链最好是两边有砖块,并且宽100左右。关于如何制作长铁链图标请参见实例1中制作砖块图案的方法。
两个铁链图标均需将属性栏中Follow the Frame的勾勾去掉。
透明图标一开始就出现在屏幕上方
【分析】铁链图标的透明与不透明的替换则由马里奥是否吃到了铁链金币来控制。我们还需要用T键来让马里奥释放铁链。
【代码】
1.(条件) Collision between 马里奥 and 铁链金币
(动作)create 铁链图标 at (0,0) from 透明图标
(动作)透明图标:destroy
(动作)铁链图标:set internal flag 1 on
(动作)play sample”金币音乐“
(动作)铁链金币:destroy
2. (条件)铁链图标:internal flag 1 is on
(条件)KeyboardControl:Upon Pressing "T"
(动作)create 铁链条子 at (0,0) from 马里奥代替物
(动作)铁链图标:set internal flag 1 off
(动作)create 透明图标 at (0,0) from 铁链图标
(动作)铁链图标:destroy
(动作)play sample ”马里奥变大“
【讲解】这里则用internal flag来控制是否可以让马里奥释放铁链。。具体效果见New world 1-3或2-2
【思考题】制作类似MF2012中的砖块开关。即打开时所有被标记的砖块可见,关闭时不可见且为空心。



id: 54018706875
16L | 作者:dodoufatch | 发布于 2014-07-19 17:38

综合运用篇2
------ 14B 显示更多的信息--
显示信息,无疑是MMF2编辑关卡中一个非常重要的要素。
我们都知道,信息时代,给我们带来了太多的方便。
马里奥,也需要生活在一个信息的时代。。。。
当然了,这一次综合运用,我们尝试着达到的效果是除了原始信息(如生命、时间、关卡名、金币等等),实现更多的信息显示。
【例子】Best Score的显示(如WSW WORLD),距离终点里程,探秘游戏的一些数据,一些存档信息等等
【实例1】制作距离终点的横向距离显示器
【分析】我们在这里选用最基本的Score来进行显示数据,用坐标差的读取来传达数据。
【准备】一个ACTIVE,上面有”Distance to destination“或”距离终点“的字样。
将时间计数器克隆一份,另一份命名为JuLier。将JuLier在属性栏中的”附带的Player"一栏中由Player3改为Player4
【推算】这次,我们不像前面一样直接给出代码,我们一段一段分析。
首先,我们要计算出马里奥代替物(在W10E中“起始点”,RE中为那个方块)到终点(就那两个竖杆子)的实时距离。利用含X的表达式来计算即可。
另外,当这个值为负数时,还要转正。我们利用0-负值得出正值。
最后,我们用这个JuLier来显示实时数据。
一共是3步,我们用2段代码(分别情况为普通以及负值)来表示。
1. (条件){编者注:这里的条件,按严格来说,是要控制马里奥是否死亡的Global Value是否成立以及对应的internal flag是否打开来控制的,但是我们这里方便起见用Always。}
Always
(条件)Negate X position of 马里奥代替物 < X(“终点杠”)
(动作)Player 4:Set Score to X("马里奥代替物")-X("终点杠")
{编者注:这里的“马里奥代替物”与“终点杠”均需为引擎中实际这两个物体的名称来代替,但是省略号不可或缺哦}
2.(条件) Always
(条件)X Position of 马里奥代替物 < X("终点杠")
(动作)Player 4:Set Score to 0-(X("马里奥代替物")-X("终点杠"))
在这里我们就实现了自己想要的效果。
一般地,制作一个信息需要以下几点注意:
1. 选择合适的方法来显示。例如Text,String,Score等等
2. 选择合适的方法来记录,例如Global Value,Global String,Alterable Value,XY,Counter,Flag等等
3. 数据要记得实时更新。例如在马里奥活着的时候执行,则条件设置为马里奥的对应的inernal flag为off时执行(这个不同的引擎不同我也不好说),或者更一般的直接Always。如果更新数据要分类讨论,则可以在Always下新增几个子条件。
【实例2】每秒更新一次马里奥的横向运动速度。
【分析】我们就用Timer来控制时间,用两次X值的差来显示马里奥的运动范围。
(这里需要事先有一个Player 4的分数显示器在屏幕上并且不被滚屏控制)
【答案】
1.(条件)Start of Frame
(动作)马里奥代替物:set Alterable Value Z to X(”马里奥代替物“)
2.(条件)Every 01''-00
(动作)Player 4: set Score to X(”马里奥代替物“)-Alterable Value Z("马里奥代替")
(动作)马里奥代替物:set Alterable Value Z to X(”马里奥代替物“)
完成了。大家可以仔细体会一下事件2中两个动作的意义。
【有奖练习题】大家还可以试着让马里奥在超速60后死亡的效果。把代码回到楼中楼。最先回复并且效果可以实现(不要求很精准),就可以成为“忠实读者”,可以得到LZ亲自录制的代码综合应用教学录像哦!(录像内容会在8月份公开,当然,录像和本教程内容并非完全一致哦)